import java.util.*;

/**
 * @author LKQ
 * @date 2022/4/8 17:03
 * @description 对于正数，最小化为：第一位选取除了0之外【1、、9】最小，然后填充0，然后依次选择最小的填充
 * 对于负数，最小化，依次填写最大的数
 */
public class Solution {
    public static void main(String[] args) {

    }
    public long smallestNumber(long num) {
        if(num == 0) {
            return num;
        }
        //正负号
        boolean flag = num > 0;
        //取绝对值进行统计
        num = num < 0 ? -num : num;
        int[] cnt = new int[10];
        while(num > 0){
            int cur = (int)(num % 10);
            cnt[cur]++;
            num /= 10;
        }
        long ans = 0;
        if(flag){
            //正数，绝对值最小
            for(int i = 1 ; i < 10 ; ){
                while(ans > 0 && --cnt[0] >= 0) {
                    ans *= 10;
                }
                if(--cnt[i] >= 0) {
                    ans = ans * 10 + i;
                } else {
                    i++;
                }
            }
        }else{ //负数，绝对值最大
            for(int i = 9 ; i >= 0 ; i--){
                while(--cnt[i] >= 0) {
                    ans = ans * 10 + i;
                }
            }
            ans = -ans;
        }
        return ans;
    }
}
